package com.atguigu.tingshu.order.service;

import com.atguigu.tingshu.model.order.OrderInfo;
import com.atguigu.tingshu.vo.order.OrderInfoVo;
import com.atguigu.tingshu.vo.order.TradeVo;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.Map;

public interface OrderInfoService extends IService<OrderInfo> {


    /**
     * 获取订单确认页面所需数据
     * @param tradeVo {itemType:"项目类型",:itemId:"项目",trackCount:"声音数量"}
     * @return 订单vo对象->为后续提交订单准备
     */
    OrderInfoVo getOrderTradeData(TradeVo tradeVo);


    /**
     * 当前用户提交订单（可能包含余额支付）
     *
     * @param orderInfoVo 订单VO信息
     * @return {orderNo:订单唯一编号}
     */
    Map<String, String> submitOrder(OrderInfoVo orderInfoVo);

    /**
     * 保存订单包含订单明细跟优惠明细
     * @param orderInfoVo 订单VO信息
     * @param userId 用户ID
     * @return 订单对象
     */
    OrderInfo saveOrderInfo(OrderInfoVo orderInfoVo, Long userId);

    /**
     * 查询当前用户指定订单信息
     * @param orderNo 订单编号
     * @return 订单信息包含：商品列表，优惠列表
     */
    OrderInfo getOrderInfo(String orderNo);

    /**
     * 查询当前用户订单列表（包含订单商品明细）
     *
     * @param pageInfo 分页对象
     * @return
     */
    void getUserOrderByPage(Page<OrderInfo> pageInfo);

    /**
     * 根据订单ID查询订单状态，未支付：改为取消
     * @param orderId 订单
     */
    void orderCancel(Long orderId);

    /**
     * 在线付款成功后-更新订单支付状态（新增购买记录）
     * @param orderNo
     * @return
     */
    void orderPaySuccess(String orderNo);

    /**
     * 查询当前用户指定订单信息
     * @param orderNo 订单编号
     * @return 订单信息包含：商品列表，优惠列表
     */
    OrderInfo getOrderInfoByOrderNo(String orderNo);
}
